<?php
namespace pay\juyin;

class PayRequest {
    /**
 * [聚银]支付接口调测例子
 * ================================================================
 * index 进入口，方法中转
 * unionPay 银联快捷支付
 * ================================================================
 */
    
    var $cfg;
    
    // 创建[聚银]签名
    public function createJuyinSign($list, $isDaifu) {
        $this->cfg = new Config();
        ksort($list);
        $md5str = '';
        foreach ($list as $key => $val) {
            if(!empty($val)){
                $md5str = $md5str . $key . '=' . $val . '&';
            }
        }
        if($isDaifu) {
            $md5key = $this->cfg->C('daifumd5key', false);
        } else {
            $md5key = $this->cfg->C('md5key', false);
        }
        $sign = strtoupper(md5($md5str . 'key=' . $md5key));
        return $sign;
    }
    
    public function Request($action, $data){
        $this->cfg = new Config();
        $newData = json_decode($data, true);  // 对 JSON 格式的字符串进行解码，转换为 PHP 变量
        switch ($action) {
            // 银联快捷
            case 'unionpay':    
                $result = $this->curl($this->cfg->C('orderUrl', true), $newData);
                break;
            // 订单查询
            case 'orderQuery':
                $result = $this->curl($this->cfg->C('orderQueryUrl', true), $newData);
                break;
            // 代付申请
            case 'daifu':   
                $result = $this->curl($this->cfg->C('daifuUrl', true), $newData);
                break;
            // 代付查询余额
            case 'daifuYuE':
                $result = $this->curl($this->cfg->C('daifuYuEUrl', true), $newData);
                break;
            // 代付查询订单
            case 'daifuSta':
                $result = $this->curl($this->cfg->C('daifuStaUrl', true), $newData);
                break;
            default:
                $result = '非法请求';
        }
        return json_encode($result, true);
    }
    
    // 使用post的传输
    public function curl($url, $data) {
        // 启动一个CURL会话
        $ch = curl_init();
        // 设置curl允许执行的最长秒数
        curl_setopt($ch, CURLOPT_TIMEOUT, 120);
        // 忽略证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        // 获取的信息以文件流的形式返回，而不是直接输出。
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        // 发送一个常规的POST请求。
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HEADER, 0); // 是否需要头部信息（否）
        // 执行操作
        $result = curl_exec($ch);
        if($result) {
            curl_close($ch);
            // 将返回json转换为数组
            $arrResult = json_decode($result, true);
//            if(!is_array($arrResult)) {
//                $arrResult['errcode']=1;
//                $arrResult['msg']='服务器繁忙，请稍候重试';
//            }
        } else {
            $arrResult = curl_error($ch);
            curl_close($ch);
//            $arrResult['errcode']=1;
//            $arrResult['msg']='服务器繁忙，请稍候重试';
        }
        // 返回数据
        return $arrResult;
    }
}

